package com.sqlcheck.service;

import com.sqlcheck.enums.GitPlatform;

/**
 * 临时凭据管理服务
 * 用于管理任务执行期间的临时凭据（Token、密码等）
 * 不做持久化存储，仅在内存中保存
 */
public interface TemporaryCredentialService {

    /**
     * 存储临时Git Token
     * 
     * @param taskId            任务ID
     * @param platform          Git平台
     * @param token             个人访问令牌
     * @param expirationMinutes 过期时间（分钟）
     */
    void storeGitToken(Long taskId, GitPlatform platform, String token, int expirationMinutes);

    /**
     * 获取临时Git Token
     * 
     * @param taskId   任务ID
     * @param platform Git平台
     * @return 访问令牌，如果不存在或已过期则返回null
     */
    String getGitToken(Long taskId, GitPlatform platform);

    /**
     * 存储临时数据库密码
     * 
     * @param taskId            任务ID
     * @param password          数据库密码
     * @param expirationMinutes 过期时间（分钟）
     */
    void storeDatabasePassword(Long taskId, String password, int expirationMinutes);

    /**
     * 获取临时数据库密码
     * 
     * @param taskId 任务ID
     * @return 数据库密码，如果不存在或已过期则返回null
     */
    String getDatabasePassword(Long taskId);

    /**
     * 清理任务相关的所有临时凭据
     * 
     * @param taskId 任务ID
     */
    void clearTaskCredentials(Long taskId);

    /**
     * 清理所有过期的凭据
     */
    void cleanupExpiredCredentials();

    /**
     * 检查Git Token是否存在且有效
     * 
     * @param taskId   任务ID
     * @param platform Git平台
     * @return 是否有效
     */
    boolean isGitTokenValid(Long taskId, GitPlatform platform);

    /**
     * 检查数据库密码是否存在且有效
     * 
     * @param taskId 任务ID
     * @return 是否有效
     */
    boolean isDatabasePasswordValid(Long taskId);
}